
// OSDAppChooser.cpp : Defines the class behaviors for the application.
//
// Copyright (c) Jason Sandys, 2009
//
// License: This code is released according to the 
// Microsoft Public License (Ms-PL) as documented at 
// http://osdappchooser.codeplex.com/license
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "OSDAppChooser.h"
#include "OSDAppChooserDlg.h"
#include "ConfigMgrLogFile.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// COSDAppChooserApp

BEGIN_MESSAGE_MAP(COSDAppChooserApp, CWinAppEx)
	ON_COMMAND(ID_HELP, &CWinApp::OnHelp)
END_MESSAGE_MAP()


// COSDAppChooserApp construction

COSDAppChooserApp::COSDAppChooserApp()
{
	// TODO: add construction code here,
	// Place all significant initialization in InitInstance
}


// The one and only COSDAppChooserApp object

COSDAppChooserApp theApp;


// COSDAppChooserApp initialization

BOOL COSDAppChooserApp::InitInstance()
{
	// InitCommonControlsEx() is required on Windows XP if an application
	// manifest specifies use of ComCtl32.dll version 6 or later to enable
	// visual styles.  Otherwise, any window creation will fail.
	INITCOMMONCONTROLSEX InitCtrls;
	InitCtrls.dwSize = sizeof(InitCtrls);
	// Set this to include all the common control classes you want to use
	// in your application.
	InitCtrls.dwICC = ICC_WIN95_CLASSES;
	InitCommonControlsEx(&InitCtrls);

	CWinAppEx::InitInstance();

	//AfxEnableControlContainer();

	// Standard initialization
	// If you are not using these features and wish to reduce the size
	// of your final executable, you should remove from the following
	// the specific initialization routines you do not need
	// Change the registry key under which our settings are stored
	// TODO: You should modify this string to be something appropriate
	// such as the name of your company or organization
	SetRegistryKey(_T("Local AppWizard-Generated Applications"));


    ComInit com;

	CjConfigMgrLogFile logFile (_T("OSDAppTree"));					
	ITSEnvClassPtr tsEnv;

    try
    {
	    tsEnv.CreateInstance (CLSID_TSEnvClass);
		
	    _bstr_t b = tsEnv->GetValue (_T ("_SMSTSLogPath"));

	    CString strTmp = b.GetBSTR ();

	    logFile.OpenLog (strTmp);
	    logFile.LogMsg (CjConfigMgrLogFile::Info, AfxGetThread()->m_nThreadID, __WFILE__, __LINE__, IDS_MSGTS);
    }
    catch (_com_error ce)
    {
	    logFile.OpenLog ();
	    logFile.LogMsg (CjConfigMgrLogFile::Info, AfxGetThread()->m_nThreadID, __WFILE__, __LINE__, IDS_MSGNOTS);
    }
        
    try
	{
        COSDAppChooserDlg dlg (logFile, tsEnv);
        
        m_pMainWnd = &dlg;
		INT_PTR nResponse = dlg.DoModal();
		if (nResponse == IDOK)
		{
            logFile.LogMsg (CjConfigMgrLogFile::Info, AfxGetThread()->m_nThreadID, __WFILE__, __LINE__, IDS_MSGEND);
		}
		else if (nResponse == IDCANCEL)
		{
		    logFile.LogMsg (CjConfigMgrLogFile::Info, AfxGetThread()->m_nThreadID, __WFILE__, __LINE__, IDS_MSGCANCEL);
		}
	}
	catch (_com_error ce)
	{
		logFile.LogMsg (CjConfigMgrLogFile::Error, AfxGetThread()->m_nThreadID, __WFILE__, __LINE__, IDS_MSGCOMFAIL, ce.ErrorMessage ());
	}
	catch (...)
	{
		logFile.LogMsg (CjConfigMgrLogFile::Error, AfxGetThread()->m_nThreadID, __WFILE__, __LINE__, IDS_MSGFAIL);
	}
	// Since the dialog has been closed, return FALSE so that we exit the
	//  application, rather than start the application's message pump.
	return FALSE;
}
